<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>TurtleDB: src/ca/uqac/dim/turtledb/NAryRelation.java Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>


</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">TurtleDB
   
   </div>
   <div id="projectbrief">A mini distributed database system</div>
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.6.1 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Packages</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('_n_ary_relation_8java.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">src/ca/uqac/dim/turtledb/NAryRelation.java</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_n_ary_relation_8java.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*-------------------------------------------------------------------------</span>
<a name="l00002"></a>00002 <span class="comment">    Simple distributed database engine</span>
<a name="l00003"></a>00003 <span class="comment">    Copyright (C) 2012  Sylvain Hallé</span>
<a name="l00004"></a>00004 <span class="comment"></span>
<a name="l00005"></a>00005 <span class="comment">    This program is free software: you can redistribute it and/or modify</span>
<a name="l00006"></a>00006 <span class="comment">    it under the terms of the GNU General Public License as published by</span>
<a name="l00007"></a>00007 <span class="comment">    the Free Software Foundation, either version 3 of the License, or</span>
<a name="l00008"></a>00008 <span class="comment">    (at your option) any later version.</span>
<a name="l00009"></a>00009 <span class="comment"></span>
<a name="l00010"></a>00010 <span class="comment">    This program is distributed in the hope that it will be useful,</span>
<a name="l00011"></a>00011 <span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00012"></a>00012 <span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00013"></a>00013 <span class="comment">    GNU General Public License for more details.</span>
<a name="l00014"></a>00014 <span class="comment"></span>
<a name="l00015"></a>00015 <span class="comment">    You should have received a copy of the GNU General Public License</span>
<a name="l00016"></a>00016 <span class="comment">    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<a name="l00017"></a>00017 <span class="comment"> -------------------------------------------------------------------------*/</span>
<a name="l00018"></a>00018 <span class="keyword">package </span>ca.uqac.dim.turtledb;
<a name="l00019"></a>00019 
<a name="l00020"></a>00020 <span class="keyword">import</span> java.util.*;
<a name="l00021"></a>00021 
<a name="l00022"></a>00022 <span class="keyword">import</span> ca.uqac.dim.turtledb.QueryVisitor.VisitorException;
<a name="l00023"></a>00023 
<a name="l00034"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html">00034</a> <span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">class </span><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html">NAryRelation</a> <span class="keyword">extends</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation.html">Relation</a>
<a name="l00035"></a>00035 {
<a name="l00039"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">00039</a>   <span class="keyword">protected</span> List&lt;Relation&gt; <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>;
<a name="l00040"></a>00040   
<a name="l00041"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#ac57dad1d4c573c5454fd341e55eb0ef8">00041</a>   <span class="keyword">protected</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#ac57dad1d4c573c5454fd341e55eb0ef8">NAryRelation</a>()
<a name="l00042"></a>00042   {
<a name="l00043"></a>00043     super();
<a name="l00044"></a>00044     <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a> = <span class="keyword">new</span> LinkedList&lt;Relation&gt;();
<a name="l00045"></a>00045   }
<a name="l00046"></a>00046   
<a name="l00047"></a>00047   @Override
<a name="l00048"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#a7fa39c21e49765163cdb930d398f0826">00048</a>   <span class="keyword">public</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_schema.html">Schema</a> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#a7fa39c21e49765163cdb930d398f0826">getSchema</a>()
<a name="l00049"></a>00049   {
<a name="l00050"></a>00050     <span class="comment">// Sufficient to return schema of first operand</span>
<a name="l00051"></a>00051     <span class="keywordflow">for</span> (<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation.html">Relation</a> r : <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>)
<a name="l00052"></a>00052       <span class="keywordflow">return</span> r.getSchema();
<a name="l00053"></a>00053     <span class="keywordflow">return</span> null;
<a name="l00054"></a>00054   }
<a name="l00055"></a>00055   
<a name="l00056"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#ac963905a165f53a616f50d18b1635245">00056</a>   <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#ac963905a165f53a616f50d18b1635245">addOperand</a>(<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation.html">Relation</a> r)
<a name="l00057"></a>00057   {
<a name="l00058"></a>00058     <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>.add(r);
<a name="l00059"></a>00059   }
<a name="l00060"></a>00060   
<a name="l00066"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aab8c004f19b9b71dd30ca8313f79f40a">00066</a>   <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aab8c004f19b9b71dd30ca8313f79f40a">getArity</a>()
<a name="l00067"></a>00067   {
<a name="l00068"></a>00068     <span class="keywordflow">return</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>.size();
<a name="l00069"></a>00069   }
<a name="l00070"></a>00070   
<a name="l00071"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#a33b44f25873ac1eec96e18bed67e50ab">00071</a>   <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#a33b44f25873ac1eec96e18bed67e50ab">tupleCount</a>()
<a name="l00072"></a>00072   {
<a name="l00073"></a>00073     <span class="keywordtype">int</span> count = 0;
<a name="l00074"></a>00074     <span class="keywordflow">for</span> (<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation.html">Relation</a> r : <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>)
<a name="l00075"></a>00075       count += r.tupleCount();
<a name="l00076"></a>00076     <span class="keywordflow">return</span> count;
<a name="l00077"></a>00077   }
<a name="l00078"></a>00078   
<a name="l00079"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#ae4fa794c3777a87c88e83955e6bf5371">00079</a>   <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#ae4fa794c3777a87c88e83955e6bf5371">acceptNAry</a>(<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_query_visitor.html">QueryVisitor</a> v) <span class="keywordflow">throws</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_query_visitor_1_1_visitor_exception.html">VisitorException</a>
<a name="l00080"></a>00080   {
<a name="l00081"></a>00081     <span class="keywordflow">for</span> (<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation.html">Relation</a> r : <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>)
<a name="l00082"></a>00082       r.accept(v);
<a name="l00083"></a>00083   }
<a name="l00084"></a>00084   
<a name="l00085"></a>00085 
<a name="l00086"></a>00086   
<a name="l00087"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html">00087</a>   <span class="keyword">protected</span> <span class="keyword">abstract</span> <span class="keyword">class </span><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html">NAryRelationStreamIterator</a> <span class="keyword">extends</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation_stream_iterator.html">RelationStreamIterator</a>
<a name="l00088"></a>00088   {
<a name="l00092"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a5c40cbb95833401d26f431d326eb01d3">00092</a>     <span class="keyword">protected</span> <span class="keywordtype">boolean</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a5c40cbb95833401d26f431d326eb01d3">m_first</a>;
<a name="l00093"></a>00093     
<a name="l00097"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#ade56bb547d8596cb8e923dcd727717a3">00097</a>     <span class="keyword">protected</span> Vector&lt;Tuple&gt; <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#ade56bb547d8596cb8e923dcd727717a3">m_lastTuple</a>;
<a name="l00098"></a>00098     
<a name="l00102"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a4cebdfbc50ada362e6f80c5c95128a02">00102</a>     <span class="keyword">protected</span> Vector&lt;RelationIterator&gt; <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a4cebdfbc50ada362e6f80c5c95128a02">m_iterators</a>;
<a name="l00103"></a>00103     
<a name="l00104"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#acf22c320e46ac2f99cf5815bba7da19b">00104</a>     <span class="keyword">public</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#acf22c320e46ac2f99cf5815bba7da19b">NAryRelationStreamIterator</a>()
<a name="l00105"></a>00105     {
<a name="l00106"></a>00106       super();
<a name="l00107"></a>00107       <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#ade56bb547d8596cb8e923dcd727717a3">m_lastTuple</a> = <span class="keyword">new</span> Vector&lt;Tuple&gt;();
<a name="l00108"></a>00108       <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a4cebdfbc50ada362e6f80c5c95128a02">m_iterators</a> = <span class="keyword">new</span> Vector&lt;RelationIterator&gt;();
<a name="l00109"></a>00109       <span class="keywordflow">for</span> (<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation.html">Relation</a> r : <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>)
<a name="l00110"></a>00110       {
<a name="l00111"></a>00111         m_iterators.addElement(r.streamIterator());
<a name="l00112"></a>00112       }
<a name="l00113"></a>00113       <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#af4d093476785df4ed91b0cc48948bd0d">reset</a>();
<a name="l00114"></a>00114     }
<a name="l00115"></a>00115     
<a name="l00116"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a5c5ab8dc4dcfff73281dcfecfffd7588">00116</a>     <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a5c5ab8dc4dcfff73281dcfecfffd7588">initializeIteration</a>()
<a name="l00117"></a>00117     {
<a name="l00118"></a>00118       <span class="keywordtype">int</span> len = <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a4cebdfbc50ada362e6f80c5c95128a02">m_iterators</a>.size();
<a name="l00119"></a>00119       <span class="comment">// Get first tuple of every table and fill m_lastTuple with them</span>
<a name="l00120"></a>00120       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; len; i++)
<a name="l00121"></a>00121       {
<a name="l00122"></a>00122         <a class="code" href="interfaceca_1_1uqac_1_1dim_1_1turtledb_1_1_relation_iterator.html">RelationIterator</a> r = <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a4cebdfbc50ada362e6f80c5c95128a02">m_iterators</a>.get(i);
<a name="l00123"></a>00123         <span class="keywordflow">if</span> (r.hasNext())
<a name="l00124"></a>00124         {
<a name="l00125"></a>00125           <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_tuple.html">Tuple</a> t = r.next();
<a name="l00126"></a>00126           <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#ade56bb547d8596cb8e923dcd727717a3">m_lastTuple</a>.insertElementAt(t, i);
<a name="l00127"></a>00127         }
<a name="l00128"></a>00128         <span class="keywordflow">else</span>
<a name="l00129"></a>00129         {
<a name="l00130"></a>00130           <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#ade56bb547d8596cb8e923dcd727717a3">m_lastTuple</a>.insertElementAt(null, i);
<a name="l00131"></a>00131         }
<a name="l00132"></a>00132       }
<a name="l00133"></a>00133     }
<a name="l00134"></a>00134 
<a name="l00140"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a5f768c51de504ee26745c8d9f499fb1d">00140</a>     <span class="keyword">protected</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_tuple.html">Tuple</a> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a5f768c51de504ee26745c8d9f499fb1d">incrementSmallestTuple</a>()
<a name="l00141"></a>00141     {
<a name="l00142"></a>00142       <span class="keywordtype">int</span> len = <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>.size();
<a name="l00143"></a>00143       <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_tuple.html">Tuple</a> smallest_tuple = null;
<a name="l00144"></a>00144       <span class="keywordtype">int</span> smallest_index = -1;
<a name="l00145"></a>00145       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = len - 1; i &gt;= 0; i--)
<a name="l00146"></a>00146       {
<a name="l00147"></a>00147         <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_tuple.html">Tuple</a> t = <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#ade56bb547d8596cb8e923dcd727717a3">m_lastTuple</a>.get(i);
<a name="l00148"></a>00148         <span class="keywordflow">if</span> (t == null)
<a name="l00149"></a>00149           <span class="keywordflow">continue</span>;
<a name="l00150"></a>00150         <span class="keywordflow">if</span> (smallest_tuple == null || smallest_tuple.<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_tuple.html#ad254ca190d8ce9149f0b329ee33adee0">compareTo</a>(t) &lt; 0)
<a name="l00151"></a>00151         {
<a name="l00152"></a>00152           smallest_tuple = t;
<a name="l00153"></a>00153           smallest_index = i;
<a name="l00154"></a>00154         }
<a name="l00155"></a>00155       }
<a name="l00156"></a>00156       <span class="keywordflow">if</span> (smallest_index == -1)
<a name="l00157"></a>00157         <span class="keywordflow">return</span> null;
<a name="l00158"></a>00158       <a class="code" href="interfaceca_1_1uqac_1_1dim_1_1turtledb_1_1_relation_iterator.html">RelationIterator</a> r = <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a4cebdfbc50ada362e6f80c5c95128a02">m_iterators</a>.get(smallest_index);
<a name="l00159"></a>00159       <span class="keywordflow">if</span> (r.hasNext())
<a name="l00160"></a>00160       {
<a name="l00161"></a>00161         <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_tuple.html">Tuple</a> next_t = r.next();
<a name="l00162"></a>00162         <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#ade56bb547d8596cb8e923dcd727717a3">m_lastTuple</a>.setElementAt(next_t, smallest_index);
<a name="l00163"></a>00163       }
<a name="l00164"></a>00164       <span class="keywordflow">else</span>
<a name="l00165"></a>00165       {
<a name="l00166"></a>00166         <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#ade56bb547d8596cb8e923dcd727717a3">m_lastTuple</a>.setElementAt(null, smallest_index);
<a name="l00167"></a>00167       }
<a name="l00168"></a>00168       <span class="keywordflow">return</span> smallest_tuple;    
<a name="l00169"></a>00169     }
<a name="l00170"></a>00170     
<a name="l00171"></a>00171     @Override
<a name="l00172"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#af4d093476785df4ed91b0cc48948bd0d">00172</a>     <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#af4d093476785df4ed91b0cc48948bd0d">reset</a>()
<a name="l00173"></a>00173     {
<a name="l00174"></a>00174       super.reset();
<a name="l00175"></a>00175       <span class="keywordflow">for</span> (<a class="code" href="interfaceca_1_1uqac_1_1dim_1_1turtledb_1_1_relation_iterator.html">RelationIterator</a> r : <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a4cebdfbc50ada362e6f80c5c95128a02">m_iterators</a>)
<a name="l00176"></a>00176         r.reset();
<a name="l00177"></a>00177       <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_stream_iterator.html#a5c40cbb95833401d26f431d326eb01d3">m_first</a> = <span class="keyword">true</span>;
<a name="l00178"></a>00178     }
<a name="l00179"></a>00179   }
<a name="l00180"></a>00180   
<a name="l00181"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html">00181</a>   <span class="keyword">protected</span> <span class="keyword">class </span><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html">NAryRelationCacheIterator</a> <span class="keyword">extends</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation_cache_iterator.html">RelationCacheIterator</a>
<a name="l00182"></a>00182   {
<a name="l00183"></a>00183     
<a name="l00184"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a6c957a6e89d5efb6cc48d8d3ce40808c">00184</a>     <span class="keyword">protected</span> Vector&lt;Table&gt; <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a6c957a6e89d5efb6cc48d8d3ce40808c">m_results</a> = null;
<a name="l00185"></a>00185     
<a name="l00186"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad7531fd20dc31862fccfa08a4e96b8a8">00186</a>     <span class="keyword">protected</span> Vector&lt;Tuple&gt; <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad7531fd20dc31862fccfa08a4e96b8a8">m_lastTuple</a> = <span class="keyword">new</span> Vector&lt;Tuple&gt;();
<a name="l00187"></a>00187     
<a name="l00188"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad90ec1984d82fa93d2c1692e910d9015">00188</a>     <span class="keyword">protected</span> Vector&lt;Iterator&lt;Tuple&gt;&gt; <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad90ec1984d82fa93d2c1692e910d9015">m_iterators</a>;
<a name="l00189"></a>00189     
<a name="l00190"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a9f1b503a1130a244e3cfee2582ecdba9">00190</a>     <span class="keyword">public</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a9f1b503a1130a244e3cfee2582ecdba9">NAryRelationCacheIterator</a>()
<a name="l00191"></a>00191     {
<a name="l00192"></a>00192       super();
<a name="l00193"></a>00193       <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad7531fd20dc31862fccfa08a4e96b8a8">m_lastTuple</a> = <span class="keyword">new</span> Vector&lt;Tuple&gt;();
<a name="l00194"></a>00194       <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad90ec1984d82fa93d2c1692e910d9015">m_iterators</a> = <span class="keyword">new</span> Vector&lt;Iterator&lt;Tuple&gt;&gt;();
<a name="l00195"></a>00195       <span class="keywordflow">for</span> (<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation.html">Relation</a> r : <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>)
<a name="l00196"></a>00196       {
<a name="l00197"></a>00197         m_iterators.addElement(r.streamIterator());
<a name="l00198"></a>00198       }
<a name="l00199"></a>00199       <span class="comment">//reset();</span>
<a name="l00200"></a>00200     }
<a name="l00201"></a>00201     
<a name="l00202"></a>00202     @Override
<a name="l00203"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#af683103a053d9e880ecd0d367a49bade">00203</a>     <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#af683103a053d9e880ecd0d367a49bade">getIntermediateResult</a>()
<a name="l00204"></a>00204     {
<a name="l00205"></a>00205       <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a6c957a6e89d5efb6cc48d8d3ce40808c">m_results</a> = <span class="keyword">new</span> Vector&lt;Table&gt;();
<a name="l00206"></a>00206       <span class="keywordflow">for</span> (<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_relation.html">Relation</a> r : <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation.html#aed20a0eb0271434efde6557d9d1064f9">m_relations</a>)
<a name="l00207"></a>00207       {
<a name="l00208"></a>00208         <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_table.html">Table</a> tab_int = <span class="keyword">new</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_table.html">Table</a>(r.getSchema());
<a name="l00209"></a>00209         <a class="code" href="interfaceca_1_1uqac_1_1dim_1_1turtledb_1_1_relation_iterator.html">RelationIterator</a> i = r.cacheIterator();
<a name="l00210"></a>00210         <span class="keywordflow">while</span> (i.hasNext())
<a name="l00211"></a>00211         {
<a name="l00212"></a>00212           <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_tuple.html">Tuple</a> t = i.next();
<a name="l00213"></a>00213           tab_int.<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_table.html#ac72d81075238b6f6e8406714a12156ff">put</a>(t);
<a name="l00214"></a>00214         }
<a name="l00215"></a>00215         <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a6c957a6e89d5efb6cc48d8d3ce40808c">m_results</a>.add(tab_int);
<a name="l00216"></a>00216       }
<a name="l00217"></a>00217     }
<a name="l00218"></a>00218     
<a name="l00219"></a><a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a2d45dd988b86842a91a41b05958c5a09">00219</a>     <span class="keyword">protected</span> <span class="keywordtype">void</span> <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a2d45dd988b86842a91a41b05958c5a09">initializeIteration</a>()
<a name="l00220"></a>00220     {
<a name="l00221"></a>00221       <span class="keywordtype">int</span> len = <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a6c957a6e89d5efb6cc48d8d3ce40808c">m_results</a>.size();
<a name="l00222"></a>00222       <span class="comment">// Get first tuple of every table and fill m_lastTuple with them</span>
<a name="l00223"></a>00223       <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; len; i++)
<a name="l00224"></a>00224       {
<a name="l00225"></a>00225         <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_table.html">Table</a> tab = <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#a6c957a6e89d5efb6cc48d8d3ce40808c">m_results</a>.elementAt(i);
<a name="l00226"></a>00226         Iterator&lt;Tuple&gt; r = tab.<a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_table.html#a19846d1f280e9a8658a751b5b6e23bf6">tupleIterator</a>();
<a name="l00227"></a>00227         <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad90ec1984d82fa93d2c1692e910d9015">m_iterators</a>.add(r);
<a name="l00228"></a>00228         <span class="keywordflow">if</span> (r.hasNext())
<a name="l00229"></a>00229         {
<a name="l00230"></a>00230           <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_tuple.html">Tuple</a> t = r.next();
<a name="l00231"></a>00231           <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad7531fd20dc31862fccfa08a4e96b8a8">m_lastTuple</a>.insertElementAt(t, i);
<a name="l00232"></a>00232         }
<a name="l00233"></a>00233         <span class="keywordflow">else</span>
<a name="l00234"></a>00234         {
<a name="l00235"></a>00235           <a class="code" href="classca_1_1uqac_1_1dim_1_1turtledb_1_1_n_ary_relation_1_1_n_ary_relation_cache_iterator.html#ad7531fd20dc31862fccfa08a4e96b8a8">m_lastTuple</a>.insertElementAt(null, i);
<a name="l00236"></a>00236         }
<a name="l00237"></a>00237       }
<a name="l00238"></a>00238     }
<a name="l00239"></a>00239     
<a name="l00240"></a>00240   }
<a name="l00241"></a>00241   
<a name="l00242"></a>00242 }
</pre></div></div><!-- contents -->
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="_n_ary_relation_8java.html">NAryRelation.java</a>      </li>

    <li class="footer">Generated on Fri Dec 7 2012 18:55:40 for TurtleDB by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>
   </ul>
 </div>


</body>
</html>
